uses
  registry, shlobj;

procedure TForm1.RegisterFileType(prefix: string; exepfad: string);
var
  reg: TRegistry;
begin
  reg := TRegistry.Create;
  try
    reg.RootKey := HKEY_CLASSES_ROOT;
    reg.OpenKey('.' + prefix, True);
    try
      reg.Writestring('', prefix + 'file');
    finally
      reg.CloseKey;
    end;
    reg.CreateKey(prefix + 'file');
    reg.OpenKey(prefix + 'file\DefaultIcon', True);
    try
      reg.Writestring('', exepfad + ',0');
    finally
      reg.CloseKey;
    end;
    reg.OpenKey(prefix + 'file\shell\open\command', True);
    try
      reg.Writestring('', exepfad + ' "%1"');
    finally
      reg.CloseKey;
    end;
  finally
    reg.Free;
  end;
  SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  RegisterFileType('pci', 'c:\file.exe');
end;
